package manager;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import persistence.ClienteDao;
import persistence.ProdutoDao;
import persistence.VendaDao;
import entity.Cliente;
import entity.Produto;
import entity.Venda;

@ManagedBean(name = "mbCliente")
@RequestScoped

public class ManagerCliente {
	
	private List<Venda>listaVenda;
	
	private Cliente cliente;

	private Cliente clienteNew;

	private Venda venda;

	// resgando injecao do jsf
	@ManagedProperty(name = "lista", value = "#{mbVenda.listaSelecionados}")
	private List<Produto> lista;
	// resgando valor total
	@ManagedProperty(name = "total", value = "#{mbVenda.total}")
	private Double total;

	public ManagerCliente() {

		clienteNew = new Cliente();

		cliente = new Cliente();

		venda = new Venda();
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Produto> getLista() {
		lista =  new ArrayList<>();
		lista  = new ProdutoDao().findAll();
		return lista;
	}

	public void setLista(List<Produto> lista) {
		this.lista = lista;
	}

	public Double getTotal() {
		return total;
	}

	public void setTotal(Double total) {
		this.total = total;
	}

	public Cliente getClienteNew() {
		return clienteNew;
	}

	public void setClienteNew(Cliente clienteNew) {
		this.clienteNew = clienteNew;
	}

	public Venda getVenda() {
		return venda;
	}

	public void setVenda(Venda venda) {
		this.venda = venda;
	}

	public String sair() {

		FacesContext fc = FacesContext.getCurrentInstance();
		fc.getExternalContext().getSessionMap().remove("mbVenda");

		return "compra.jsf-redirect=true";
	}

	public String cadastrar() {

		String msg = "";

		FacesContext fc = FacesContext.getCurrentInstance();

		ClienteDao cd = new ClienteDao();
		VendaDao vd = new VendaDao();

		try {

			// grava o cliente no banco
			cd.create(clienteNew);

			venda.setDataVenda(new Date());
			venda.setValor(total);
			venda.setProdutos(lista);
			venda.setCliente(clienteNew);

			vd.create(venda);

			msg = "Cliente Cadastradom com suscesso & Venda Realizada";

			return "confirmacao.jsf";

		} catch (Exception e) {
			msg = "Erro" + e.getMessage();
		}
		
		finally{
		fc.addMessage("form1", new FacesMessage(msg));
		
		}
		return null;

	}

	public String comprar(){
		
		
		String msg="";
		FacesContext fc = FacesContext.getCurrentInstance();
		
		ClienteDao cd =  new ClienteDao();
		
		VendaDao vd  =  new VendaDao();
		
		
		try {
			
			Cliente cli =  cd.logar(cliente);
			
			if(cli != null){
				
				venda.setDataVenda(new Date());
				venda.setCliente(cli);
				venda.setValor(total);
				
				vd.create(venda);
				
				 msg = "Venda realizada co sucesso";
				 
				 return "confirmacao.jsf";
				
			}else{
				
				
				FacesContext.getCurrentInstance().addMessage("form1", new FacesMessage(FacesMessage.SEVERITY_ERROR,"voce precisara se cadastra","!!!!!!"));
				
				
			}
			
		} catch (Exception e) {
			msg="eroo"+e.getMessage();
		}

		
		finally{
			
			
			fc.addMessage("form1", new FacesMessage(msg));
		}
	return null;
	
	}

	public List<Venda> getListaVenda() {
		
		listaVenda =  new ArrayList<>();
		listaVenda =  new VendaDao().findAll();
		
		return listaVenda;
	}

	public void setListaVenda(List<Venda> listaVenda) {
		this.listaVenda = listaVenda;
	}
	

}
